TCP/IP 協定與 Internet 網路:第六章 IP Routing 協定  上一頁           下一頁

 

翻轉工作室:粘添壽

 

6-15 BGP 路徑協定

『邊界閘門協定』(Border Gateway Protocol, BGPRFC 1267)是一種自治系統之間的路徑選擇協定,目前已修正到第四版本(BGP4),詳細規格由 RFC 1771 上規範。一個自治系統大多是由一個或多個網路所構成,並在一個共通的管理環境及路由條件之下,一般都是由『網際網路服務提供者』(Internet Service Provider, ISP的網路範圍。在一個 ISP 之內的路徑選擇也大多透過『內部閘門協定』(Interior Gateway Protocol, IGP來達成,譬如:RIP-2OSPF 等等。BGP 主要是被使用於 ISP 之間的路徑選擇。

6-15-1 BGP 路徑選擇

基本上,BGP 路由器公佈和交換網路上可到達路徑的訊息給其它 BGP 路由器,該路徑訊息包含本身自治系統內和可到達其它自治系統的路徑訊息。BGP 協定也是屬於『距離向量路徑協定』,也相同的建構本身路由表,再傳送給相鄰的 BGP 路由器以更新路由表,如此週期性的更新路由表。但 BGP RIP BGP RIP 很大的不同點在於,RIP 只宣告可到達路徑的跳躍數目,而 BGP 必需列舉到每一目標的路由。BGP 所言的目標也許是一個自治系統或是一個子網路系統,一個自治系統或許會包含許多網路號碼(或 IP 網路)。因此 BGP 用一個 16 位元的數字來表示一個自治系統,每一自治系統在包含一系列的網路號碼,這些都按照大小順序排列。

BGP 路由器之間交換路徑訊息有兩種情況:起始信息交換和後來訊息更新。當路由器連結上網路時,BGP 路由器將互相交換路由表,而當路由表有變更時,只交換變更部份並不全部傳送。基本上,BGP 路由器之間並不週期性交換訊息,而是路由表變更或發現更佳路徑時才會傳送。雖然 BGP 也是採用單一路由值(Metric)來表示一個路徑的費用,以作為最佳路徑選擇的基礎,路由值的評估可能包含:跳躍數、傳輸速率、延遲時間等等,但最主要的還是政策的考量。

BGP 訊息的傳輸相異於 RIP OSPFRIP 是包裝於 UDP 封包傳輸,OSPF 是直接利用 IP 封包作多點傳輸,而 BGP 是利用 TCP 協定傳輸。首先 BGP 路由器之間必須建立 TCP 連線,且交換整個路由表,從此以後,新增加或變更內容將被視為路由表的變更而傳送出去。

為了提供路徑選擇的效率,BGP-4 採用『無層級網域間路徑選擇』(Classless Inter-Domain Routing, CIDR之技術。BGP-4 路由器之間使用 IP 得前置(Prifix)位元數(IP Netmask 前面連續幾個 1)來簡化網路的『等級』(Class,並將自治系統的路徑設定成若干個超級網(Suppernet)以簡化路徑訊息。但採用 CIDR 時,IGP 具有傳遞網路遮罩之功能,還好目前使用的 RIP-2 OSPF 都具有此功能。但在一自治系統(或超級網)之內也許會有其它次網域,如圖 6-29 所示,因此,在一自治系統內如使用 CIDR 來作路徑選擇,也必須利用 BGP-4 路由器,此路由器稱之為『內部 BGP』(Interior BGP, IBGP,如果針對外部網路骨幹則稱之為『外部 BGP』(External BGP, EBGP。基本上,IBGP 負責自治系統和外部骨幹的橋樑,如訊息路徑並非本自治系統之內,便利用 IBGP 轉送給 EBGP,並由 EBGP 轉送到其它自治系統上,其架構如圖 6-35 所示。

6-35 EBGP IBGP 路徑選擇

6-15-2 BGP-4 運作方式

BGP-4 是利用 TCP 協定來互相交換訊息,所使用用的著名埠口(Well-Known)為 TCP 179。在 BGP-4 路由器之間又可區分為:前端路由器(Front Router)和同儕路由器(Peer Router)兩種運作方式,前端路由器的運作就像圖 6-32 IBGP EBGP 之間的運作,基本上 IBGP 處理內部網路的路徑選擇(如 RIP-2 OSPF),並將本身內部網路的路徑圖經 CDIR 協定(IP 位址 + 前置位元數)處理後傳送給 EBGP 路由器(以 BGP-4 協定),此內部路徑圖又稱為AS 圖』。同儕路徑選擇就如圖 6-32 中,國際性 ISP 網路上的路由器之間的路徑選擇,也是我們主要探討的 BGP-4 的運作方式。又針對一部 BGP-4 路由器所管轄的範圍也許是由多個網路所構成,並且公告路徑訊息不一定要由 BGP 路由器負責,如果針對較複雜的網路環境,甚至可以利用一部主機電腦來處理 BPG 路徑訊息,並負責傳遞給同儕路由器,因此,在 BGP-4 環境下,一個網路路由節點都稱之為BGP-4 系統』(BGP-4 System

BGP-4 系統起始建立路由表後分別傳送給相鄰的同儕系統(或稱同儕路由器),而後隨著交換訊息來增加、修正或刪除某些路由表參數。BGP-4 並不需要週期性的廣播路由表給同儕系統,而是當路由表有所變更時,再利用Update 訊息』通知相鄰之 BGP-4 系統有哪些路徑訊息變更,一般時候同儕系統之間週期性以較短的KeepAlive 訊息』告知對方自己還是存在著。當網路有特殊狀況發生或有異常障礙時,BGP-4 系統會以Notification 訊息』告知相鄰之同儕系統,譬如,TCP 連線中斷。

如果有一自治系統是透過多個 IBGP 路由器(或稱為 BGP-4 發言者)連結到外部骨幹網路,如圖 6-36 所示。每一個 BGP-4 發言者是利用內部閘門協定(如 RIP-2)交換訊息所得,因此,在每一個 BGP-4 發言者所建構的 AS-圖和其它發言者不一定相同,當這些訊息都前送到 EBGP 路由器時,可能會造成路徑選擇之間的困擾。在這種情況之下,為了達到 BGP-4 發言者之間訊息資料的一致性問題,並不希望任一發言者可以隨意傳送訊息給前端 BGP,而是在所有發言者之間選一個當作所有訊息的出入(Exit/Entry)端點,並由此出入端點集中管理整個自治系統的 AS-圖,其它發言者由此端點的路由器索取最新路徑訊息,再前送給 EBGP 路由器,並且當其它發言者收到變更網路訊息(內部網路或外部網路)時,必需即時利用內部閘門協定傳送給出入端點路由器。當然也希望內部閘門協定的傳送更新訊息能在 IBGP 發言者傳送更新訊息之前完成。

6-36 多重 BGP 發言者

6-15-3 路徑訊息資料庫

每一個 BGP 發言者維護一只『路徑訊息資料庫』(Routing Information Base, RIB,其包含了三個主要部分:

(1)  Adj-RIBs-InAdj-RIBs-In 儲存經過 BGP 發言者之間的Update 訊息』學習得來的訊息,這些訊息再經過『判斷處理』(Decision Process後所得的路徑訊息,再填入 Adj-RIBs-In 欄位內。

(2)  Loc-RIBLoc-RIB 儲存本地路徑選擇訊息,這些訊息也許是由 Adj-RIBs-In 欄位的資料,再經過本地政策所選擇的路徑訊息,以作為本地路徑選擇的主要依據。

(3)  Adj-RIBs-Out:儲存預備公佈給其它同儕系統的路徑訊。,當本地 BGP 發言者欲公告路徑訊息給其它同濟系統,便將 Adj-RIBs-Out 包裝在Update 訊息』內,傳送出去。

基本上,Adj-RIBs-In 儲存未經處理的路徑訊息,它是由其它同儕系統傳送而來的。Loc-RIB 是依照本地路由策略再加上 Adj-RIBs-In 訊息處理所得的路徑訊息。Adj-RIBs-Out 是經過處理後,發現有變更訊息而必須傳送給其它同儕系統的路徑訊息。

6-15-4 路徑訊息宣傳與儲存

為了達成 BGP-4 協定的運作,一個路徑被定義成一個單元的訊息,該訊息是由一對的目的位址所形成的途徑(Path),每一路徑的儲存與宣傳如下:

路徑被一對 BGP 發言者以Update 訊息』宣傳,其方式如下:該系統可以到達的 IP 位址儲存Update 訊息』『網路層可到達訊息』(Network Layer Reachability Information, NLRI欄位中,並且該路徑的屬性(Attribute)也儲存於屬性欄位上。

路徑訊息被儲存於 RIB 資料庫中,並區分為:Adj-RIBs-InLoc-RIB Adj-RIBs-Out 三個不同欄位。

BGP-4 提供三種方法來讓 BGP 發言者通知同儕系統有哪些先前所宣傳的路徑已經不再有效,也就是讓 BGP 發言者取消(Withdrawn)該服務路徑:

1.    在先前宣傳之路徑的 IP 前置位址加入Update 訊息』Withdrawn Routes欄位上,傳送給相鄰之同儕系統,表示該路徑已不再有效使用。

2.    將另一路徑更新已不再使用路徑的『網路可到達訊息』(NLRI),並宣傳出去。

3.    關閉 BGP 發言者之間的連線,表示先前所宣傳的路徑訊息被移除掉。

6-15-5 BGP-4 訊息格式

BGP-4 訊息是利用 TCP 連線來互相宣傳,每一封包最大的容量為 4096 個位元組(Bytes),BGP 發言者之間傳遞有:Open MessageUpdate MessageNotification Message Keep-alive Meaasge 等四種訊息。這四種訊息都使用相同的封包標頭,標頭長度為 19 Bytes,如圖 6-37 所示,標頭欄位之功能如下:

Marker:內容為一個認證訊息,讓訊息接收者可以預定該值。如果為 Open 訊息但沒有認證功能時,該欄位設定為全部 1;如果有加入認證訊息,接收端可利用該訊息來確定資料的正確性。

Length:表示整個封包的長度,該數值一定在 19 4096 之間,BGP 訊息並沒有填補(Padding)資料。

Type:表示該訊息的型態:

1. 『開啟訊息』(Open Message

2. 『更新訊息』(Update Message

3. 『通知訊息』(Notification Message

4. 『保持存活訊息』(Keep-alive Message

Data:內容為各訊息型態的資料(OpenUpdateNotification、或 Keep-alive 訊息),其長度依照各訊息型態而不同。

6-37 BGP-4 之封包標頭

        以下針對欄位 Type 所區分的四種訊息加以介紹,各種訊息是附加在封包標頭的後面,也就是如圖 6-37 上的 Data 欄位(依照各種訊息而有不同的長度)。

(A) 開啟訊息(Open Message

Open Message 是建立兩個閘門之間的交談連線,它是連線後第一個訊息,如欲傳送其他訊息之前,必須使用Open Message 建立雙方對談連線。圖 6-38 Open Message 的資料內容,各欄位功能如下:

VersionVer):表示該封包的 BGP 版本。

Autonomous SystemAS):表示該發送封包者所在的自治系統編號。

Hold-TimeHT):表示保持時間,在這時間內沒有回應的路由器,都被假設已失去功能。

BGP IdentifierBGP):傳送該封包的外部閘門號碼(IP 位址)。

Optional Parameter LengthO-Len):表示緊接在後的 Optional 欄位的長度。

Optional Parameter任意參數。目前僅使用於認證(Authentication)訊息,有兩個部份:Authentication code Authentication data

6-38 Open Message 的資料內容

(B) 更新訊息(Update Message

Update Message 是被用來更新同儕系統之間的路徑訊息,使各個路由器都能建立一個可觀察整個網路的拓樸圖。Update Message 是由 TCP 連線完成已確定訊息的可靠度。當網路上有任何路徑被抽離,該相連之 BGP 發言者便利用 Update Message 告知相鄰之閘門。圖 6-39 Update Message 的資料內容,各欄位功能如下:

Unfeasible Router LengthURL):表示緊接著後面Withdrawn Router 欄位的長度。

Withdrawn RouterWR):表示有那些已被抽離的路由器(IP 位址表示),可變長度表示之。

Total Path Attribute LengthTPAL):表示後面緊接著兩個有關屬性欄位的長度。

Path AttributePA):路徑屬性。描述該路徑之特性有能是下列屬性:

Origin指派屬性(Mandatory attribute)。為原系統指定之路徑。

AS Path經系統指定之經由多個自治系統片段所構成的路徑。

Next Hop指派屬性。指定經由邊界網路的下一路徑可到達目的位址。

Mult Exit Disc選擇屬性(Option attribute)。在多點路徑之中辨別可到達鄰近自治系統之路徑。

Local Pref任意屬性(Discretionary attribute)。描述任意路由的級數。

Atomic Aggregate任意屬性。被使用在表現有關路徑選擇的訊息。

Aggregator選擇屬性。包含有關路徑聚集的訊息。

Network Layer Reachability InformationNLRI):『網路層可到達訊息』是作為 BGP 發言者宣傳可到達的路徑,它包含一串列的 IP 位址的網路位址(前置位元),每一 IP 前置位元(IP Prefix)表示可到的路徑區段。

6-39 Update Message 的資料內容

(C) 通知訊息(Notification Message

當外部閘門發現任何異常狀態,便使用該訊息告知相鄰閘門,或被使用於中斷連線。圖 6-40 Notification Message 的資料內容,各欄位功能如下:

Error CodeEC):該封包表示錯誤的種類,如下列:

Message Header Error所傳送的封包標頭發生錯誤。

Open Message Error所傳送的 Open Message 錯誤,如版本、自治系統或 IP 號碼、或認證錯誤。

Update Message Error所傳送的 Update Message 錯誤,如屬性不合等。

Hold Time Expired表示 Hold Time 溢時,將該區段之BGP 被視為沒有功能。

Finite State Machine Error協定流程錯誤。

Cease結束 BGP 連線,

Error Subcode錯誤型態的附加描述碼。

Error Data內容為有關錯誤型態的資料。

6-40 Notification Message 的資料內容

(D) 存活訊息(Keep-alive Message

用來測試連線中斷或 TCP 連線另一端的 BGP 路由器是否故障了,傳送訊息的建議是每 30 秒一次。該訊息並沒攜帶任何資料,因此沒有 Data 欄位(如圖 6-34),只在 Type 欄位上標示為 Keep-alive MessageType = 4),整個封包長度為 19 BytesBGP 發言者就是利用此短的訊息,週期性的通知同濟系統自己還是存在著。

6-15-6 BGP-4 路徑屬性

BGP-4 雖然也是採用『距離向量演算法』,但它和 RIP-2 之間有很大的不同點,RIP-2 只利用『跳躍距離』(Hop Count來評估路徑費用。而 BGP-4 利用許多『路徑屬性』(Path Attributes)來評估每一條路徑的費用,這些路徑屬性將被包裝在 Update 訊息內(如圖 6-39),以讓 BGP 發言者之間來互相傳遞。BGP-4 路徑屬性可區分為以下四大類:

1. 著名指定性(Well-known Mandatory

2. 著名隨意性(Well-known Discretionary

3. 選項過渡性(Optional Transitive

4. 選項非過渡性(Optional Non-transitive

『著名屬性』(Well-known Attribute必須經過所有 BGP-4 的製造者共同確認,又著名指定的屬性必需被包含每一 Update 訊息內;而著名隨意的屬性可視環境需要來決定是否要加入到 Update 訊息內。除了著名屬性外,每一路徑也許包含若干個選項性(Optional)屬性,但這些屬性並不需要 BGP-4 製造商共同確認,而是各個廠商依照環境需求而增加,某些選項屬性不被其它廠商採用,在評估路徑費用時可以不用理會。過渡性(Transitive)屬性是屬於較區域性或特殊自治系統所制定的屬性;非過渡性是針對某些特殊路徑所制定,也會制定相對應的路徑規則。在 RFC-1771 中規範有許多路徑屬性,但並非所有屬性都會被一般製造商採用,我們以 Cisco 公司所實現的路徑屬性來介紹,Cisco 採用:WeightLocal PreferenceMulti-exit DiscriminatorOriginAS_pathNext hop Community 屬性,分別介紹如下:

(A) 衡權屬性(Weight Attribute

衡權屬性是 Cisco 所定義的本地路徑屬性,該屬性並不宣傳給其它同儕系統(或相鄰路由器)。如果路由器學習到同一目的位址有一個以上的路徑可以到達,便將衡權量較高的路徑填入路由表,並宣傳給其它相鄰路由器。如圖 6-41 中,路由器 A AS 100)學習到(或收到宣傳訊息)兩條路徑可以到達 127.16.1.0/24 網路(AS 200),一條是經由路由器 C,衡權屬性設定為 100;另一條是經由路由器 B,衡權屬性設定為 50,因此,路由器 A 選擇路由器 C 路徑並填入路由表。

6-41 衡權屬性

(B) 本地優先屬性(Local Preference Attribute, Local_Pref

Local_Pref 是屬於『著名隨意性』的屬性,被使用於表示選定本地自治系統的出口。它不同於衡權屬性,本地 BGP 發言者會將該訊息宣傳給相鄰的路由器,尤其在有多點出口的環境裡,Local_Pref 告知相鄰路由器哪一個才是本地自治系統的優先出口位址。如圖 6-42AS 100 接收到兩個由 AS 200172.16.1.0/24 網路)所宣傳的訊息,當路由器 A 收到由路由器 C 的宣傳訊息,則依照網路狀態設定為 Local_Pref = 50;路由器 B 收到由路由器 D 的宣傳,則設定 Local_Pref = 100,路由器 A B 互相傳遞訊息後,判斷經由路由器 D 到達 172.16.1.0/24 Local_Pref 較高,因此,AS 100 前往 AS 200 網路路徑便選擇經由路由器 D

6-42 本地優先屬性

(C) 多重出口鑑別屬性(Muti-Exit Discriminator Attribute, MED

或稱為『向量值』(Metric屬性。MED 是用來建議外部自治系統進入本自治系統的向量值。如圖 6-43 所示,AS 200 的路由器 C AS 100 系統的路由器 A 宣傳由本路徑進入本系統的 MED = 10;另一方面,路由器 D 宣傳進入本自治系統的 MED = 5,在 AS 100 內經過訊息交換後,判斷經由路由器 D AS 200 系統費用較低,便選用該路徑到達 AS 200 系統。

6-43 多重出口鑑別屬性

(D) 起源屬性(Origin Attribute

Origin 也是屬於『著名指定屬性』,是用來表示該路由是 BGP 以何種途徑所學習得來。Origin 可能是下列三種數值之一:

IGP表示該路由是經由『內部閘門協定』(IGP學習得來的。

EGP表示該路由是由『外部邊界閘門協定』 Exterior Border Gatway Protocol, EBGP學習得來的。

Incomplete表示該路由起源不明或是經由其它通訊協定學習得來,這種屬性的路由大多是被重新分配到另一個 BGP 上。

(E) 自治系統路徑屬性(AS_Path Attribute

AS_Path 也是屬於『著名指定屬性』,它是被用來表示某一路由所經過的路徑。當一個路由被宣傳而經過某一路由器時,該路由器便將它的AS 識別值加入到此路由的次序串列中(AS_Path),再宣傳給其它自治系統,因此,由 AS_Path 屬性就可以觀察到該路由所經過的路徑。由圖 6-44 可以觀察到,AS 1 的起源路由為 172.16.1.0/24,並向 AS 2 AS 3 宣傳該路由,宣傳時將 AS_Path 設定為 [1],當 AS 2 AS 3 收到該宣傳,便將自己的 AS 識別碼加到 AS_Path 內後傳遞給下一個自治系統([3.1] [2.1])。但當 AS 1 收到 AS_Path = [3.1] [2.1],也就知道該路由是由本地的路由器發出,便拒絕該路由訊息。又譬如 AS 2 收到 AS 3 系統所宣傳的 AS_Path = [3.1],也判斷自行由 AS_Path = [1] 的路由路徑會較為短捷,因此,它會選用 AS_Path = 1 的路由到達 AS 1

6-44 自治系統路徑屬性

(F) 下一跳躍屬性(Next-Hop Attribute

Next-Hop 屬性是針對 EBGP 的下一跳躍的位址規範,也就是邊界路由器的位址。在 RBGP 的同儕路由器之間,Next-Hop 是以一個 IP 位址來表示,也表示由此位址可進入哪一自治系統。如圖 6-45 所示,AS 200 系統宣傳進入 172.16.1.0/24 網路的 Next-Hop = 10.1.1.1AS 100 的路由器 A 收到該訊息後,再宣傳給路由器 B,表示欲進入 176.16.1.0/24 網路的下一跳躍位址為 10.1.1.1

6-45 下一跳躍屬性

(G) 共同體屬性(Community Attribute

Community 屬性是提供一種方法來處理群體性之目的位址。可利用 Community 來規劃某一群組目的位址成為一個共同體,以作為決定是否傳送路由訊息給這一群組的成員。一般事先定義有下列三種共同體屬性:

No-Export不要宣傳此路由給同儕邊界路由器(EBGP)。

No-Adverties不要宣傳此路由給任何同儕路由器。

Internet宣傳此路由給 Internet 共同體,所有路由器都屬於此共同體的成員。

6-46 ~ 48 為上列三種屬性的宣傳傳遞方式,其中 6-46 表示 No-Export 屬性的宣傳方式;而 6-47 表示 No-Adverties 的宣傳方式;另外 6-48 Internet 屬性的方式。

6-46 共同體屬性之 No-Export

6-47 共同體屬性之 No-Advertise

6-48 共同體屬性之 Internet

6-15-7 判斷處理

判斷處理(Decision Process)是由週期性的宣傳訊息中選擇適當的路由,當 BGP-4 路由器收到同儕系統所宣傳的訊息將其儲存於 RIB Adj-RIB-in,再經過判斷處理後儲存於 Loc-RIB 資料庫內。由經過處理後的路由及其它訊息儲存於 Adj-RIB-Out,而準備向其他同儕系統宣傳。選擇適當路由是依照每一路由的屬性來作判斷的依據,依照路由的屬性關係來評估每一路由的優先等數(Degree of Preference),以選擇較高的優先等數的路由。在 RFC 1771 中,以三個處理時相(Phase)來測試各種不同的現象:

1. Phase 1負責計算由相鄰自治系統 BGP 發言者所傳送路由的優先等數,並將較高優先等數的路由向本自治系統之 BGP 發言者宣傳,每一較高優先級數路由都是一個獨立路徑。

2. Phase 2Phase 1 完成後,再執行 Phase 2Phase 2 負責由較高優先級數的路由中選擇較適合的路由,而將其儲存於 Loc-RIB 中,每一路由也是一個獨立路徑。

3. Phase 3 Loc-RIB 已被更新完成後,再執行 Phase 3Phase 3 負責散播 Loc-RIB 上的路由給相鄰的同濟自治系統,針對路由的聚集和訊息簡化使達到最佳化的處理,也是在此時相裡完成。

前面我們介紹 Cisco 公司所使用的路由屬性,以下也針對 Cisco 公司的路由選擇規則來介紹。BGP 也許由多個來源的宣傳收到相同的路由,但它只能再選擇其中一個優先級數較高的路由。當某一路由被選擇到時,必須將其存放於 IP 路由表內(或 Loc-RIB),並傳播給相鄰的自治系統,BGP 依照下列準則選擇最佳路由:

如果有某一路徑被描述為下一路徑(Next Hop),便往該路徑傳送。但如果該路徑已經到達不了,便將其刪除掉(或不存在下一路徑),再依照下列步驟判斷選擇最佳路由。

首先選擇較高衡權(Weigth)屬性的路徑。

如果路徑的衡權屬性相同,則選擇最高『本地優先』(Local Preference)屬性的路徑。

如果本地優先屬性相同,則選擇本路由器之 BGP 執行中產生的路徑。

如果路由都沒有起源屬性,則選擇較短『自治系統路徑』(AS_Path)屬性的路徑。

如果都是相同長度的 AS_Path,則依照『起源』(Origin)屬性選擇較低屬性的路徑(IGP EGP 屬性低,EGP Incomplet 屬性低)。

如果起源屬性相同時,則選擇最低『多重出口鑑別』(MED)屬性的路徑。

如果所有屬性都相同時,則選擇最靠近相鄰的 IGP 路徑。

還是無法分出時,則選擇被標示為 BGP 之最小 IP 位址的路徑。

以上是針對網路環境來考量路徑選擇,但 BGP-4 允許以政策為基礎的路徑選擇,政策是由自治系統的系統管理者決定,並由規劃檔中設定成為路由值的一部份。政策的決定並不是通訊協定的一部份,但政策規格允許 BGP 實際應用時有多重選擇時,可作為路由器之間選擇的依據,並控制資料的重新分配,以配合路徑選擇的政策、安全性、商業性的考量。

 

 

<GOTOP>